package com.lujieni.aviator.service;

import com.googlecode.aviator.AviatorEvaluator;
import com.googlecode.aviator.Expression;
import com.lujieni.aviator.entity.User;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

/**
 * Aviator表达式服务类
 */
@Service
public class AviatorExpressionService {

    /**
     * 默认的匹配表达式：name为lujieni且age大于30
     */
    private static final String DEFAULT_EXPRESSION = "name == 'lujieni' && age > 30";

    /**
     * 使用默认表达式检查用户是否匹配条件
     *
     * @param user 用户对象
     * @return 是否匹配
     */
    public boolean checkUserMatch(User user) {
        return checkUserMatch(user, DEFAULT_EXPRESSION);
    }

    /**
     * 使用自定义表达式检查用户是否匹配条件
     *
     * @param user       用户对象
     * @param expression 表达式字符串
     * @return 是否匹配
     */
    public boolean checkUserMatch(User user, String expression) {
        try {
            // 编译表达式
            Expression compiledExp = AviatorEvaluator.compile(expression);

            // 准备变量环境
            Map<String, Object> env = new HashMap<>();
            env.put("name", user.getName());
            env.put("age", user.getAge());

            // 执行表达式并返回结果
            Object result = compiledExp.execute(env);
            return Boolean.TRUE.equals(result);
        } catch (Exception e) {
            System.err.println("表达式执行错误: " + e.getMessage());
            return false;
        }
    }

    /**
     * 验证表达式语法是否正确
     *
     * @param expression 表达式字符串
     * @return 是否有效
     */
    public boolean validateExpression(String expression) {
        try {
            AviatorEvaluator.compile(expression);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * 获取默认表达式
     *
     * @return 默认表达式字符串
     */
    public String getDefaultExpression() {
        return DEFAULT_EXPRESSION;
    }
}
